package com.zyl.blog.common.strategy;

import com.zyl.blog.common.annotation.Sensitive;

/**
 * 姓名字脱敏策略
 * 单字名：保留姓，名用*代替（如：张*）
 * 双字名：保留姓和最后一个字，中间用*代替（如：张*三）
 * 多字名：保留姓和最后一个字，中间用*代替（如：欧阳*雪）
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.common.strategy
 * @ClassName: NameSensitiveStrategy
 * @Author FinalFantasy
 * @Date 2025/9/8-10:42
 */
public class NameSensitiveStrategy extends AbstractSensitiveStrategy {

    /**
     * 姓名脱敏实现
     * 根据姓名长度不同，采用不同的脱敏规则
     */
    @Override
    public String desensitize(String value, Sensitive annotation) {
        if (value == null || value.isEmpty()) {
            return value;
        }

        int len = value.length();

        // 单字名：保留姓，名用*代替
        if (len == 1) {
            return value;
        }
        // 双字名：保留姓，名用*代替
        else if (len == 2) {
            return mask(value, 1, 0, annotation.maskChar());
        }
        // 多字名：保留姓和最后一个字，中间用*代替
        else {
            return mask(value, 1, 1, annotation.maskChar());
        }
    }
}
